﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Terrae.Clases;
using Terrae.GUI.Contrato;
using Terrae.Logica.Comandos;
using Terrae.Logica.FabricaLogica;
using Terrae.Clases.FabricaClase;

namespace Terrae.GUI.Presentador
{
    public class PresentadorModificarInvernadero
    {
        #region Atributos
        
        /// <summary>
        /// Instancia del contrato ModificarInvernadero.
        /// </summary>
        private IContratoModificarInvernadero _contrato;
        private Persona _persona;
        private Invernadero _invernadero;
        private Comando<bool> _comando1, _comando2;

        #endregion Atributos

        #region Constructor

        /// <summary>
        /// Implementación del Presentador ModificarInvernadero.
        /// </summary>
        /// <param name="contrato"></param>
        public PresentadorModificarInvernadero
            (IContratoModificarInvernadero contrato)
        {
            _contrato = contrato;
        }

        #endregion Constructor

        #region Métodos

        #region Pintar Valores

        /// <summary>
        /// Método que pinta los datos de la persona y 
        /// el invernadero seleccionado.
        /// </summary>
        /// <param name="sessionP"></param>
        /// <param name="sessionI"></param>
        public void PintarValores(object sessionP, object sessionI)
        {
            _persona = (_contrato.Sesion["Usuario"] as Persona);
            _invernadero = (_contrato.Sesion["ObjetoIn"] as Invernadero);
            _contrato.NombreI.Text = _invernadero.Nombre;
            _contrato.Usuario.Text = _persona.Usuario;
            _contrato.Correo.Text = _persona.Correo;
            _contrato.Celular.Text = _persona.Celular;
            _contrato.Descripcion.Text = _invernadero.Descripcion;
            _contrato.Contrasena.Text = _persona.Contrasena;
        }

        #endregion Pintar Valores

        #region Modificar Invernadero

        /// <summary>
        /// Método que envia los datos a modificar del invernadero
        /// y la persona a modificar.
        /// </summary>
        public void ModificarInvernadero()
        {
            Entidad per = FabricaEntidad.NuevaPersona();
            Entidad inver = FabricaEntidad.NuevoInvernadero();
            _invernadero = (_contrato.Sesion["ObjetoIn"] as Invernadero);
            _persona = (_contrato.Sesion["Usuario"] as Persona);
            (per as Persona).Id = _persona.Id;
            (per as Persona).Usuario = _contrato.Usuario.Text;
            (per as Persona).Correo = _contrato.Correo.Text;
            (per as Persona).Celular = _contrato.Celular.Text;
            (inver as Invernadero).Id = _invernadero.Id;
            (inver as Invernadero).Nombre = _contrato.NombreI.Text;       
            (inver as Invernadero).Descripcion = _contrato.Descripcion.Text;
            if (_contrato.Contrasena.Text == "")
            {
                (per as Persona).Contrasena = _persona.Contrasena;
            }
            else
            {
                (per as Persona).Contrasena = _contrato.Contrasena.Text;
            }

            //Obtenemos el comando de agregar la planta desde la fabrica lógica.
            _comando1 = FabricaComando.CrearComandoModificarInvernadero(inver);
            _comando2 = FabricaComando.CrearComandoModificarPersona(per);

            if (_comando1.Ejecutar() == true && _comando2.Ejecutar() == true)
            {
                _contrato.MensajeConfirmacion.Text = "Se han realizado los cambios exitosamente";
                _contrato.MensajeConfirmacion.Visible = true;
            }
            else
            {
                _contrato.MensajeError.Text = "No se han podido realizar sus cambios";
                _contrato.MensajeError.Visible = true;
            }
        }

        #endregion #region Modificar Invernadero

        #endregion Métodos
    }
}